/**
 *   ЭЛЕКТРОННЫЙ ЖУРНАЛ «ШКАЛА»: РАЗРЕШ АДМИНИСТРАЦИИ НА ПРОПУСК УРОКОВ
 *   Copyright © 2024, А.М.Гольдин. Modified BSD License
 */
"use strict";

// Добавление разрешения
const permitAdd = async () => {
   let dtStart = dqs("#permitStart").value,
         dtFin = dqs("#permitFinish").value,
         dtDoc = dqs("#permitDocDate").value + " № "
               + dqs("#permitDocNum").value.trim(),
         clName = dqs("#permitSelClass").value;
   let pupLogins = [];
   document.querySelectorAll("#permitTable td:nth-child(2)").forEach(e => {
      if (e.innerHTML) pupLogins.push(e.id.replace("check--", ''));
   });
   let pupVal = pupLogins.length;
   if (!pupVal) {info (1, "Не выбраны учащиеся!"); return;}
   
   let permResp = await apireq(
      "permitAdd",
      [dtStart, dtFin, dtDoc, clName, pupLogins]
   );
   if (permResp != "success") {
      info(1, "Ошибка на сервере.<br>Разрешение не добавлено. " + permResp);
      return;
   }
   info (0, `Разрешение (${pupVal} учащ.)<br>успешно добавлено.`);
   permUnselAll();
   dqs("#permChAll").innerHTML = "Отметить всех";
}

// Отметить одного учащегося в таблице / снять отметку
const permCheck = tdElem => {
   tdElem.innerHTML = tdElem.innerHTML ? '' : '■';
}

// Отметить в таблице всех учащихся
const permSelAll = () => {
   document.querySelectorAll("#permitTable td:nth-child(2)").forEach(e => {
      e.innerHTML = '■';
   })
}

// Снять отметку в таблице со всех учащихся
const permUnselAll = () => {
   document.querySelectorAll("#permitTable td:nth-child(2)").forEach(e => {
      e.innerHTML = '';
   })
}

// Формирование таблицы со списком детей и полями типа checkbox
const permitPupListShow = async () => {
   let clName = dqs("#permitSelClass").value,
       permitResp, pupLgnArr, pupFioArr;

   // Получаем список учащихся
   permitResp = await apireq("gradesGet", [clName, '', "a"]);
   if (permitResp == "none") {
      info(1, "Не могу получить список учащихся");
      return;
   }
   let permitObj = JSON.parse(permitResp);

   // Формируем массивы фио детей и их логинов
   pupLgnArr = permitObj.puList ? permitObj.puList : [];
   pupFioArr = permitObj.pnList;
      
   // Формируем содержимое таблицы выбора учащихся
   if (pupLgnArr.length) {
      let tblPupilInner = '';
      for (let i=0; i<pupLgnArr.length; i++) tblPupilInner +=
        `<tr><td>${pupFioArr[i]}</td>` +
        `<td id="check--${pupLgnArr[i]}" onclick="permCheck(this)"></td></tr>`;
      dqs("#permitTable").innerHTML = tblPupilInner;
      dqs("#permChAll").innerHTML = "Отметить всех";
   }
   else dqs("#permitTable").innerHTML =
      "<tr><td colspan='2'>В этом классе нет учащихся!</td></tr>";
}

// Формирование контента страницы
createSection("permit", `
   <div id="permitAddForm">
   <h3>Разрешение на пропуск занятий</h3>
   С&nbsp;<input type="date" id="permitStart">
   <nobr>по <input type="date" id="permitFinish"></nobr><br>
   <b>Документ:</b> дата <input type="date" id="permitDocDate">
   <nobr>номер <input type="text" id="permitDocNum" value="0"></nobr><br>
   <b>Выберите класс:</b>
   <select id="permitSelClass" onChange="permitPupListShow()"></select>
   <button type="button" id="permChAll" onclick="
      if (this.innerHTML == 'Отметить всех') {
         permSelAll (); this.innerHTML = 'Снять все отметки';
      }
      else {
         permUnselAll (); this.innerHTML = 'Отметить всех';
      }
   ">Отметить всех</button>
   <table id="permitTable"></table>
   <p><b>Будьте внимательны!</b><br>
   Отменить разрешение сможет только классный руководитель.</p>
   <button type="button" onClick="permitAdd()">Предоставить разрешение</button>
   </div>
`);

// Динамически подгружаем контент страницы (имя метода = имени пункта меню!)
getContent.permit = async () => {

   // Сегодняшняя дата во все поля
   let now = (new Date()).toISOString().split('T')[0];
   dqs("#permitStart").value = now;
   dqs("#permitFinish").value = now;
   dqs("#permitDocDate").value = now;
         
   // Заполняем select выбора класса
   let selClassInner = '';   
   let apiResp = await apireq("classesList");
   if (apiResp == "none") {info(1, "Не могу получить данные"); return;}
   let permitClasses = classSort(JSON.parse(apiResp));
   for (let cl of permitClasses)
      selClassInner += `<option>${cl}</option>`;      
   
   dqs("#permitSelClass").innerHTML = selClassInner;
   if (selClassInner) {
      dqs("#permitAddForm").style.display  = "block";
      permitPupListShow(); // показываем таблицу с учащимися выбранного класса
   }
   else {
      dqs("#permitAddForm").style.display  = "none";
      info(1, "Классов пока нет.");
   }
};
